草庐IT

Java TLS-PSK 套接字

全部标签

java - TCP 客户端套接字填满堆

使用java套接字库,我看到当服务器接受tcp连接但不从缓冲区读取数据时,同时我们的客户端继续抽取大量数据,客户端堆大小增长到最大可用并压垮客户端应用。无论如何我可以限制套接字缓冲区大小或使用该堆的任何内容,如果违反它,连接将被终止?这样客户端可以检测到客户端检测到连接消失了,客户端;this.socket=newSocket(server,port);this.socket.setKeepAlive(true);this.outwriter=newOutputStreamWriter(this.socket.getOutputStream());this.outwriter.writ

c++ - 我们也可以从客户端套接字启用 keepalive 吗?

当我执行netstat-anto时,我得到了以下输出ProtoRecv-QSend-QLocalAddressForeignAddressStateTimertcp00127.0.0.1:1169127.0.0.1:40238ESTABLISHEDoff(0.00/0/0)我猜off意味着keepalive计时器已关闭。我们可以从客户端套接字启用keepalive吗?或者它只能为服务器端代码启用?如何从客户端启用它? 最佳答案 您可以从任何一侧启用SO_KEEPALIVE。请记住默认的ping时间和超时时间很长,例如默认的ping时

c - c中的TCP套接字

我正在尝试为我的程序编写一个TCP套接字接口(interface),但由于accept()错误(我认为)而使我抓狂。为此,我创建了一些简化的测试代码。首先我做了一些设置intserver_socket=0;server_socket=socket(AF_INET,SOCK_STREAM,0);intaccepted_connection=0;structsockaddr_inserver_address;server_address.sin_port=htons(9001);server_address.sin_family=AF_INET;server_address.sin_add

c++ - 阻塞 TCP 套接字 : “send()” return and error handling

根据这个答案Blockingsockets:when,exactly,does“send()”return?,阻塞套接字上的send()将在用户缓冲区被复制到内核缓冲区后立即返回。在传送失败的情况下(即,客户端未收到字节),调用send()的进程如何收到失败发生的通知? 最佳答案 POSIX/BSD套接字API不为TCP连接错误提供中断驱动的异步接口(interface)。由于TCP是可靠的,因此数据未交付的唯一原因是连接本身出现故障,无法完全交付。您必须通过在(可能是非阻塞的)套接字上执行某种同步操作来检测错误。最异步的机制是使用

java - 如何在没有接收到数据的情况下检查是否有来自 TCP 套接字的传入数据?

基本上我需要做的是获得通知,然后使用类DataInputStream和方法read()继续接收数据。问题是DataInputStream没有方法来检查是否有要读取的内容,并且通过使用read()方法进行测试会干扰对read()的进一步调用。我可以通过读取一个字节并向其附加更多数据来进行测试,但我想看看是否有更优雅的解决方案。 最佳答案 DataInputStreamdoesnothaveamethodtocheckifthereissomethingtoread是的。您错过了available()方法,但它并不总是返回非零值,具体取

c++ - 套接字 recv() 一次一个字节

使用套接字一次调用一个字节的recv()是个好主意吗(就性能而言)?它会导致上下文切换吗?如果是这样,为什么会有上下文切换? 最佳答案 一次调用一个字节的recv()会对性能产生负面影响。每次调用都有一定的开销——转换到内核模式、文件描述符查找、分派(dispatch)到协议(protocol)特定的驱动程序、缓冲区/队列锁定等。使用更大的调用recv()缓冲区大大降低了每字节的平均开销。 关于c++-套接字recv()一次一个字节,我们在StackOverflow上找到一个类似的问题:

sockets - 客户端和服务器的不同套接字缓冲区大小

我有一个问题:我们可以为客户端和服务器设置不同的套接字缓冲区大小吗?例如在服务器上将发送和接收缓冲区设置为2048,在客户端设置为13312会有任何问题(服务器缓冲区的大小小于客户端)?如果是,会出现什么问题? 最佳答案 我认为您是在询问应用程序中的缓冲区。操作系统使用的缓冲区是另一回事。在客户端和服务器端使用不同长度的缓冲区是合法的。实际上它必须是合法的,因为例如网络浏览器在网络服务器中没有信息缓冲区大小,网络服务器不知道客户端缓冲区。但是您必须记住,TCP是一种面向流的协议(protocol),它不保留消息边界。例如让客户端有一

sockets - 从没有数据大小的lua tcp套接字接收数据

我一直在使用到游戏服务器的套接字tcp连接。这里最大的问题是游戏服务器发送数据时没有任何分隔符——因为它发送的数据包长度在数据内——这使得无法使用socket:receive("*a")或"*l"。从服务器接收到的数据没有静态大小,并以十六进制格式发送。我正在使用这个解决方案:whiletruedolocalrect,r,st=socket.select({_S.sockets.main,_S.sockets.bulle},nil,0.2)fori,coninipairs(rect)doresp,err,part=con:receive(1)ifresp~=nilthendataRec

c++ - 使用 SFML TCP 套接字和数据包损坏文件

我正在编写代码,让客户端连接到服务器,然后服务器响应并发送.exe文件。我正在使用SFML网络库来编写我的代码。我可以成功发送大小正确但md5sum错误的文件,这意味着某些内容正在更改,但我不知道在哪里。这是我的代码,有人能发现我的错误吗?服务器:#include#include#include#include#includeintmain(){std::stringi{"HelloWorld"};sf::Packetpacket;//packetBuffer;std::stringtmp;std::ifstreamfis("C:\\Users\\CyberSecurity\\Docu

node.js - 管理多个 TCP 套接字 nodejs

我有一个这样的数组:varexports=module.exports={};varnet=require('net');exports.config=[{ip:"127.0.0.1",id:1,socket:newnet.Socket(),data:"",},{ip:"192.168.5.242",id:2,socket:newnet.Socket(),data:"",}];我正在尝试使用此代码将每个项目与TCP套接字连接:for(varkeyintornelli.config){tornelli.config[key].socket.connect(4000,tornelli.co